<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      var person = {
        getName: function () {
          // 这个this怎么指向person1
          return this.name
        },
      }
      var person1 = {
        name: '科比',
      }

      // 一定是对call 用的非常熟悉
      // 参数接收的  改变this指向的参数
      Function.prototype.myApply = function (context) {
        // 这里面的this是谁?
        // 这里的this必须是一个function  this指的getName()函数
        if (typeof this !== 'function') {
          throw new Error('error')
        }
        context = context || window
        // 考虑参数
        // 拿到除了第一个参数以外的参数
        context.fn = this
        let result
        if (arguments[1]) {
          result = context.fn(...arguments[1])
        } else {
          result = context.fn()
        }
        delete context.fn
        return result
      }

      console.log(person.getName.myApply(person1, [1, 2, 3]))
    </script>
  </body>
</html>
